Soru & Cevap

Java Matches Kullanımı Hakkında

05.06.2017 - 12:07

Az önce sohbet'ten sorulan bir soruya şu anda sohbet'e erişemediğim için buradan cevap vermek zorunda kaldım. Matches kullanacak diğer arkadaşlara da faydalı olması dileğiyle..

Soru: String s3 = ".10 Final-Sinavi "; System.out.println(s3.matches("(\\S*\\D*\\W\\S*\\W*)")); System.out.println(s3.matches("(\\D*\\W\\S*\\W*\\D)"));
İlk yazdırılan kısım true sonuç verirken ikinci kısım false sonucu veriyor farkı nedir ?

Şöyle ki mathes'ın içine yazılan karakterlerin bir anlamı bulunmaktadır. Bunlar aşağıdaki şekilde tanımlanmaktadır.


\D 0 ile 9 arasındaki rakamlar haricindeki karakter Kısaca : [^0-9]
\S Whitespace karakter haricindeki bir karakter, Kısaca: [^\s]
\W Word karakter harici  bir karakter. Yani küçük harf, büyük harf veya rakam harici bir karakter [^\w]

Print işleminde \S ile işleme başlanmıştır. Yani  " \t\n\x0b\r\f " bu karakterler hariç herhangi bir karakter gelebileceğni söylüyor. String ifademiz ise .(nokta) ile
başlamaktadır. bu yüzden işlem true olarak devam eder. * ifadesi bu karakterden sınırsız gelebileceğini söylemektedir bütün ifadeler için geçerlidir. İlk gelen karakter .(nokta) olduğu için ikinci print işlemi false sonucunu vermektedir. 

831 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user mhmmt26
mhmmt26
05.06.2017 - 01:45

hocam allah razı olsun :D çok teşekkürler 

Edit:

 

String s1 = "423-4124-43     AB";
System.out.println(s1.matches("(\\d{3}-*\\d{2,}-*\\d{1,}\\s*\\w{2})"));
System.out.println(s1.matches("(\\d{1,}-?\\d{2,}-?\\d{1,}\\s*\\w*)"));

hocam 2.ci satırdaki println içinde " ? " işareti silinince sonuç yine aynı çıkıyor bir işlevi yok orda onun anlamı nedir ? nasıl kullanırsak daha anlamlı olur ? 

 

 

Rahmican Büyükyekdeli
05.06.2017 - 02:28
? Sonuna geldiği yapının ya hiç tekrar etmemesi yada bir kere tekrar edebileceği anlamına gelmektedir. Bu yüzden 2 kere tekrar eden bir yapı olsaydı false sonucunu verecekti